Cloud Workstationsのログイン時のIPアドレス制限はできるのか #cm_google_cloud_adcal_2024

Cloud Workstationsのログイン時のIPアドレス制限はできるのか #cm_google_cloud_adcal_2024

Clock Icon2024.12.14

データ事業本部のsutoです。
この記事はクラスメソッドの Google Cloud アドベントカレンダー2024 の14日目の記事です。

Workstationsクラスターを通してWorkstationインスタンスへログインする際、送信元のアクセス制限ってどこまでできるのかを検証してみたので、備忘録を兼ねて本記事にまとめてみました。

今回は以下アーキテクチャ図における赤枠の部分「Client→Workstationsクラスター間の送信元アクセス制限」の内容となります。

スクリーンショット 2024-11-30 150129

3行まとめ

本件の結論を先に整理すると、

  • クラスターへのIP制限は、コンソール、gcloudからのセッション確立・ログインの制限は実装できる
  • インスタンスのURL直接アクセスは制限できない
  • プライベートクラスターであれば、パブリックIPからのアクセス制限は可能

となりました。
以降に実際に検証した内容を書き出していきます。

検証

VPC Service Controlsとプライベートクラスター

まず、IP制限のポリシーとなると「Access Context Manager」があるので、VPC Service Controls(VPC-SC)と組み合わせられるかと思いましたが、以下メッセージのとおりパブリッククラスターはVPC-SCをサポートしていません(保護サービスにWorkstations APIを設定しているとパブリッククラスターは作成できない)。プライベートクラスターであれば作成可能です。

スクリーンショット 2024-11-30 152536

つまり、最もネットワーク通信におけるセキュリティを高くする場合、次の構成を実装することを検討します。

  • プライベートクラスターで作成する
    • クラスター自体がパブリックIPからアクセスできない仕様となる
  • VPC-SCによるアクセス制限を設定
    • Access Context Managerに、より限定されたプリンシパル(プライベートIP、IAMユーザ)からのアクセスのみを許可を設定

プライベートクラスターを利用するには、「Cloud VPNまたはCloud InterConnect」のような
Google Cloud VPCへのプライベート通信経路の構築が必要となります。
詳細は以下のページを参照してください。

https://cloud.google.com/workstations/docs/configure-vpc-service-controls-private-clusters?hl=ja

パブリッククラスター

ではパブリッククラスターのIP制限は可能なのか調べてみました。
Workstationsのコンソール画面には、現状クラスターアクセスへのIP制限を設定できるオプションはありません。
よってVPC-SC以外の他サービスで思い当たるものは、

  • Identity-Aware Proxy(IAP)
  • IAMポリシーにおけるcondition
  • Access Context Manager + コンソールとAPIのアクセスポリシー

あたりかなーと思いました。

しかし、Identity-Aware Proxy(IAP)はWorkstationsは対象外、IAMにおけるconditionにおいても送信元IP(Source IP)を条件にすることはできないようです。

残るは「Access Context Manager + コンソールとAPIのアクセスポリシー」となり、GoogleコンソールとGoogle SDK全体に対してのアクセス制限を行うしかないようです。
この設定でWorkstationへのセッション確立とログインができるのか試してみます。

Access Context Manager + コンソールとAPIのアクセスポリシーをやってみた

前提条件は以下の状態となります。

  • 検証ユーザーで事前にWorkstationのインスタンスを作成し、「稼働中」のステータスにしておく
    • ログインできるユーザーはインスタンス作成者のみの状態で、他ユーザーのログイン許可はしていない
  • アクセス制限の設定を作成するための必要な権限は事前に付与済み
    • Access Context Manager 編集者(プロジェクトレベル)
    • Cloud アクセス バインディング管理者(組織レベル)

まずAccess Context Managerでアクセス許可するIPリストを記載したアクセスレベル作成します。

スクリーンショット 2024-11-30 160101

次にコンソールとAPIのアクセスポリシーの作成を行いますが、指定するプリンシパルは「Googleのグループ」が必要なので、組織に対してGoogleグループを作成し、対象ユーザーを登録しておきます。

スクリーンショット 2024-11-30 160516

「セキュリティ→コンソールと API のアクセス ポリシー」画面で、作成したGoogleグループとアクセスレベルを指定して保存します。

スクリーンショット 2024-11-30 160838

では、この状態で検証ユーザーとは別のユーザーに切り替えてインスタンスへアクセスを試してみると、想定どおりPermission Errorによってアクセスできませんでした。

スクリーンショット 2024-11-27 110115

次に、ユーザーの送信元IPアドレスを許可リスト以外のものに変更してGoogle Cloudコンソールにアクセスしようとすると、以下の画面が表示されアクセス不可となりました。

スクリーンショット 2024-11-27 103543

次にインスタンス作成時に生成された「ホストのURL」をブラウザに直接入力してアクセスを試みてみました。

スクリーンショット 2024-11-27 105429

結果、アクセスできてしまいました

スクリーンショット 2024-11-30 162728

こちらの公式ドキュメントの表にもありますが、Cloud Workstations へのアクセス方法において、「コンソール、gcloud、API」については対象だが、今回のようなURL直接となる「ブラウザによるHTTPアクセス」や「HTTPセッション経由によるSSH」はサポート範囲外のようです。

最後に

Workstationsにはさらに「Chrome Enterprise Premiumを利用したデバイス制限等の拡張機能の設定(2024/12/1時点プレビュー)」もありますが、いずれにしてもホストのURLの直接リクエストに対するアクセス制限は現状できないのではないかとという結論でした。

※Chrome Enterprise Premiumの有効化は別途課金対象ですので、利用の際はご注意ください。

https://dev.classmethod.jp/articles/new-service-chrome-enterprise-premium-is-enterprise-security/

今回

以上

明日12/15はエノカワさんです。よろしくお願いします!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.